package com.yxy.config;

import com.yxy.interceptor.JwtTokenAdminInterceptor;
import com.yxy.interceptor.JwtTokenUserInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

// @Configuration表示为配置类，Spring会扫描并加载这个类中的配置
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {

    @Autowired
    private JwtTokenAdminInterceptor jwtTokenAdminInterceptor;
    @Autowired
    private JwtTokenUserInterceptor jwtTokenUserInterceptor;

    /**
     * 注册自定义拦截器
     *
     * @param registry
     */
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        log.info("开始注册自定义拦截器...");
        registry.addInterceptor(jwtTokenAdminInterceptor)
                .addPathPatterns("/tourism/admin/**")
                .excludePathPatterns("/tourism/admin/administrator/login")
                .excludePathPatterns("/tourism/common/**");
        registry.addInterceptor(jwtTokenUserInterceptor)
                .addPathPatterns("/tourism/user/**")
                .excludePathPatterns("/tourism/user/client/login")
                .excludePathPatterns("/tourism/user/client/register")
                .excludePathPatterns("/tourism/user/client/verifyPhone")
                .excludePathPatterns("/tourism/user/client/resetPwd")
                .excludePathPatterns("/tourism/user/sightsBooking/useSightsBooking/{id}")
                .excludePathPatterns("/tourism/user/hotelBooking/useHotelBooking/{id}")
                .excludePathPatterns("/cky/common/**");
    }

    /**
     * 配置跨域 （用nginx解决跨域时，CORS配置要关）
     * @param registry 注册表对象，用于添加CORS配置
     */
//    @Override
//    // addCorsMappings 方法用于配置CORS（Cross-Origin Resource Sharing，跨域资源共享）
//    public void addCorsMappings(CorsRegistry registry) {
//        registry.addMapping("/**")   // 用于指定哪些路径需要启用CORS支持，，/salary/** 表示所有以 /salary/ 开头的路径都会启用CORS支持
//                .allowedOrigins("http://localhost:9090")    // 用于指定允许跨域请求的源
//                // 浏览器在发送实际请求之前会先发送一个预检请求（Preflight Request），以确认服务器是否允许该跨域请求。预检请求通常是一个 OPTIONS 请求
//                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 用于指定允许的HTTP方法
//                .allowedHeaders("*")    // 用于指定允许的请求头，* 表示允许所有请求头
//                // 指定是否允许发送凭据（如cookies、HTTP认证信息等）。如果允许发送凭据，allowedOrigins 必须是一个具体的源，不能使用*
//                .allowCredentials(true);
//    }
    @Override
    // addCorsMappings 方法用于配置CORS（Cross-Origin Resource Sharing，跨域资源共享）
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")   // 用于指定哪些路径需要启用CORS支持，，/salary/** 表示所有以 /salary/ 开头的路径都会启用CORS支持
                .allowedOrigins("*")    // 用于指定允许跨域请求的源
                // 浏览器在发送实际请求之前会先发送一个预检请求（Preflight Request），以确认服务器是否允许该跨域请求。预检请求通常是一个 OPTIONS 请求
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 用于指定允许的HTTP方法
                .allowedHeaders("*");    // 用于指定允许的请求头，* 表示允许所有请求头
    }
}
